#pragma once

#include <memory>
#include <string>

#include "dataset.h"

#include "iimage.h"


class Image final:
    public IImage
{
public:
    Image();

    Image(
        std::shared_ptr<IDataSet>  aDataSet
    );

    Image(
        const std::string&         aDCMFile
    );

    ~Image();

public:
    bool
    AddOverlay(
        const Overlay              aOverlay
    ) override;

    bool
    GeneralDCMFile(
        const std::string          aFileName,
        const DCM_TransferSyntax   aXfer
    ) override;

    bool
    JPEGCompress(
        const std::string& aDCMFile,
        const std::string& aNewFileName,
        DCM_TransferSyntax aXfer
    );

    bool
    JPEGDecompress(
        const std::string& aDCMFile,
        const std::string& aNewFileName,
        DCM_TransferSyntax aXfer
    );

private:
    DcmDataset*                    myDataset;
};
